export default class CustomPalette {
  constructor(create, elementFactory, palette) {
    this.create = create;
    this.elementFactory = elementFactory;
    palette.registerProvider(this);
  }


  // 这个是绘制palette的核心，函数名不要变
  getPaletteEntries() {
    const elementFactory = this.elementFactory;
    const create = this.create;

    function dragEventFactory(type) {
      return function (event) {
        const taskShape = elementFactory.create('shape', {
          type: type
        });
        create.start(event, taskShape);
      };
    }

    return {
      'create.startEvent': {
        title: '开始节点',    // 鼠标悬浮到节点上显示的文字
        className: 'icon-custom bpmn-icon-startEvent',   // 样式名
        action: {      // 操作该节点时会触发的事件，此时只注册一个拖动事件即可，否则拖动时没有效果
          dragstart: dragEventFactory('bpmn:StartEvent')
        }
      },
      'create.endEvent': {
        title: '结束节点',    // 鼠标悬浮到节点上显示的文字
        className: 'icon-custom bpmn-icon-endEvent',   // 样式名
        action: {      // 操作该节点时会触发的事件，此时只注册一个拖动事件即可，否则拖动时没有效果
          dragstart: dragEventFactory('bpmn:EndEvent')
        }
      },
      'create.task': {
        title: '任务',    // 鼠标悬浮到节点上显示的文字
        className: 'icon-custom bpmn-icon-task',   // 样式名
        action: {      // 操作该节点时会触发的事件，此时只注册一个拖动事件即可，否则拖动时没有效果
          dragstart: dragEventFactory('bpmn:Task')
        }
      },
      'create.gateWay': {
        title: '网关',    // 鼠标悬浮到节点上显示的文字
        className: 'icon-custom bpmn-icon-gateWay',   // 样式名
        action: {      // 操作该节点时会触发的事件，此时只注册一个拖动事件即可，否则拖动时没有效果
          dragstart: dragEventFactory('bpmn:ParallelGateway')
        }
      }
    };
  }
}
CustomPalette.$inject = [
  'create',
  'elementFactory',
  'palette'
];